[Athena] Partition ProjectionでNowを使った場合の動作を確認してみた

[Athena] Partition ProjectionでNowを使った場合の動作を確認してみた

Amazon AthenaのPartition ProjectionでNOWを使ったとき、どのような動作になるのか調べてみました。
Clock Icon2020.10.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon Athenaには、Partition Projectionがあります。

Partition ProjectionでNOWを使ったとき、どのような動作になるのか調べてみました。

最初に結論

UTC時刻でした。

Partition ProjectionでNOWを使った場合の動作を調べる

調査方法

  1. S3バケットを作成する
  2. AthenaでPartition Projectionを使うテーブルを作成する
  3. S3バケットに未来の日付でファイルを格納する
  4. 上記で格納したファイルの内容がAthenaで確認できるタイミングを調べる

なお、今回は「1日毎」で確認しました。

1. S3バケットを作成する

S3バケットを作成します。

  • バケット名: cm-fujii.genki-athena-partition-projection-bucket

S3バケットを作成する

続いて、下記のサンプルデータをS3バケットに格納します。なお、Kinesis Firehoseが格納する想定としています。

{"todoId":"t0001","title":"iPhone 12 Pro Maxを予約する","done":false}
{"todoId":"t0002","title":"醤油を買う","done":false}

S3のKeyは実験時点の2020年10月28日としています。

  • S3-Key: 2020/10/28/08/sample_201028.json

28日分のファイルをS3にアップロードする

2. AthenaでPartition Projectionを使うテーブルを作成する

まずはデータベースを作成します。

CREATE DATABASE partition_projection_test

続いて、テーブルを作成します。このとき、TBLPROPERTIESでPartition Projectionを使うように設定しています。

CREATE EXTERNAL TABLE IF NOT EXISTS partition_projection_test.sample_table (
  `todoid` string,
  `title` string,
  `done` boolean
)
PARTITIONED BY (
  `dateday` string 
)
ROW FORMAT SERDE
  'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
)
LOCATION
  's3://cm-fujii.genki-athena-partition-projection-bucket/'
TBLPROPERTIES (
  'has_encrypted_data'='false',
  'projection.enabled' = 'true',
  'projection.dateday.type' = 'date',
  'projection.dateday.range' = '2020/10/01,NOW',
  'projection.dateday.format' = 'yyyy/MM/dd',
  'projection.dateday.interval' = '1',
  'projection.dateday.interval.unit' = 'DAYS',
  'storage.location.template' = 's3://cm-fujii.genki-athena-partition-projection-bucket/${dateday}'
);

テーブル作成後にクエリを実行し、さきほどS3バケットにアップロードしたサンプルデータが見えることを確認します。

SELECT * FROM "partition_projection_test"."sample_table"
WHERE dateday = '2020/10/28'
ORDER BY todoid
LIMIT 10;

無事に見えました!

クエリ実行結果(28日のデータは見える)

3. S3バケットに未来の日付でファイルを格納する

下記のサンプルデータをS3バケットに格納します。

{"todoId":"t8888","title":"ブログを書く","done":true}
{"todoId":"t9999","title":"見積書を提出する","done":false}

S3のKeyは、実験時点の翌日である2020年10月29日にしています(時刻は適当)。

  • S3-Key: 2020/10/29/10/sample_201029.json

29日分のファイルをS3にアップロードする

4. 上記で格納したファイルの内容がAthenaで確認できるタイミングを調べる

使うクエリ

SELECT * FROM "partition_projection_test"."sample_table"
WHERE dateday = '2020/10/29'
ORDER BY todoid
LIMIT 10;

クエリ実行結果

時刻(JST) 29日のデータ
10/28 17:23頃(アップロード直後) 見れない
10/28 23:58頃 見れない
10/29 00:01頃 見れない
10/29 08:58頃 見れない
10/29 09:01頃 見れた!!!
29日分のデータが見れない様子

クエリ実行結果(28日のデータは見えない)

29日分のデータが見えた様子

クエリ実行結果(29日のデータが見える)

さいごに

「99%そうだろうな」と思った結果でした。頭の片隅に「おや?」と浮かんだモヤがスッキリすれば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.